import type { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';
//因为axios的请求参数，即AxiosRequestConfig。他不能传入拦截器，所以我们扩展下。

//首先定义拦截器的接口
export interface RequestInterceptors<T> {
  // 请求拦截
  requestInterceptors?: (config: AxiosRequestConfig) => AxiosRequestConfig;
  requestInterceptorsCatch?: (err: AxiosError) => Promise<AxiosError> | AxiosError;
  // 响应拦截
  responseInterceptors?: (config: T) => T;
  responseInterceptorsCatch?: (err: AxiosError) => Promise<AxiosError> | AxiosError;
}
export interface RequestConfig<T = AxiosResponse> extends AxiosRequestConfig {
  //此时axios的请求参数就可以传入拦截器了
  interceptors?: RequestInterceptors<T>;
}

//自定义请求参数
export interface CustomRequestConfig<T> extends RequestConfig {
  data?: T;
}
